dir=$(dirname "$0")
. "$dir/block-common.sh"
+case "$command" in
+ online | offline)
+ exit 0
+ ;;
+esac
+
expand_dev() {
local dev
case $1 in
echo -n $dev
}
-t=$(xenstore_read "$XENBUS_PATH"/type || true)
+t=$(xenstore_read_default "$XENBUS_PATH"/type "MISSING")
case "$command" in
- bind)
+ add)
p=$(xenstore_read "$XENBUS_PATH"/params)
case $t in
phy)
done
exit 1
;;
-
- *)
- [ -x /etc/xen/scripts/block-"$t" ] && \
- /etc/xen/scripts/block-"$t" bind $p
- ;;
esac
;;
- unbind)
- node=$(xenstore_read "$XENBUS_PATH"/node)
+ remove)
case $t in
phy)
exit 0
;;
file)
+ node=$(xenstore_read "$XENBUS_PATH"/node)
losetup -d $node
exit 0
;;
-
- *)
- [ -x /etc/xen/scripts/block-"$t" ] && \
- /etc/xen/scripts/block-"$t" unbind $node
- ;;
-
esac
;;
esac
+
+# If we've reached here, $t is neither phy nor file, so fire a helper script.
+[ -x /etc/xen/scripts/block-"$t" ] && \
+ /etc/xen/scripts/block-"$t" "$command" $node
dir=$(dirname "$0")
. "$dir/xen-hotplug-common.sh"
-command="$1"
+findCommand "$@"
-if [ "$command" != "bind" ] && [ "$command" != "unbind" ]
+if [ "$command" != "online" ] &&
+ [ "$command" != "offline" ] &&
+ [ "$command" != "add" ] &&
+ [ "$command" != "remove" ]
then
log err "Invalid command: $command"
exit 1
# places, then this script is the default.
#
# Usage:
-# vif-bridge (up|down)
+# vif-bridge (add|remove|online|offline)
#
# Environment vars:
# vif vif interface name (required).
fi
case "$command" in
- up)
+ online)
if brctl show "$bridge" | grep "$vif" >&/dev/null
then
log debug "$vif already attached to $bridge"
fatal "brctl addif $bridge $vif failed"
ifconfig "$vif" up || fatal "ifconfig $vif up failed"
- success
;;
- down)
+
+ remove)
# vifs are auto-removed from bridge.
ifconfig "$vif" down || fatal "ifconfig $vif down failed"
;;
handle_iptable
log debug "Successful vif-bridge operation for $vif, bridge $bridge."
+success
findCommand "$@"
-if [ "$command" != "up" ] && [ "$command" != "down" ]
+if [ "$command" != "online" ] &&
+ [ "$command" != "offline" ] &&
+ [ "$command" != "add" ] &&
+ [ "$command" != "remove" ]
then
log err "Invalid command: $command"
exit 1
fi
+case "$command" in
+ add | offline)
+ exit 0
+ ;;
+esac
+
# Parameters may be read from the environment, the command line arguments, and
# the store, with overriding in that order. The environment is given by the
function frob_iptable()
{
- if [ "$command" == "up" ]
+ if [ "$command" == "online" ]
then
local c="-A"
else
# places, then vif-bridge is the default.
#
# Usage:
-# vif-nat (up|down)
+# vif-nat (add|remove|online|offline)
#
# Environment vars:
# vif vif interface name (required).
main_ip=$(ip addr show eth0 | sed -e '/inet /!d;s/^.*inet \([^\s*]\)\s.*$/\1/')
case "$command" in
- up)
+ online)
ifconfig ${vif} ${vif_ip} netmask ${netmask} up
echo 1 >/proc/sys/net/ipv4/conf/${vif}/proxy_arp
ipcmd='a'
;;
- down)
+ remove)
ifconfig ${vif} down
ipcmd='d'
;;
# places, then vif-bridge is the default.
#
# Usage:
-# vif-route (up|down)
+# vif-route (add|remove|online|offline)
#
# Environment vars:
# vif vif interface name (required).
main_ip=$(ip addr show eth0 | sed -e '/inet /!d;s/^.*inet \([^\s*]\)\s.*$/\1/')
case "$command" in
- up)
+ online)
ifconfig ${vif} ${main_ip} netmask 255.255.255.255 up
echo 1 >/proc/sys/net/ipv4/conf/${vif}/proxy_arp
ipcmd='a'
;;
- down)
+ remove)
ifdown ${vif}
ipcmd='d'
;;
PATH=/etc/xen/scripts:$PATH
+case "$XENBUS_TYPE" in
+ vbd)
+ /etc/xen/scripts/block "$ACTION"
+ ;;
+ vif)
+ [ -n "$script" ] && $script "$ACTION"
+ ;;
+esac
+
case "$ACTION" in
add)
- case "$XENBUS_TYPE" in
- vbd)
- /etc/xen/scripts/block bind
- ;;
- esac
;;
remove)
- case "$XENBUS_TYPE" in
- vbd)
- /etc/xen/scripts/block unbind
- ;;
- vif)
- [ -n "$script" ] && $script down
- ;;
- esac
# remove device backend store entries
- xenstore-rm -t "$XENBUS_PATH"
- xenstore-rm -t "error/$XENBUS_PATH"
+ xenstore-rm -t "$XENBUS_PATH" || true
+ xenstore-rm -t "error/$XENBUS_PATH" || true
;;
online)
- case "$XENBUS_TYPE" in
- vif)
- [ -n "$script" ] && $script up
- ;;
- esac
;;
offline)
;;
esac
-
-SUBSYSTEM=="xen-backend", KERNEL=="vbd*", ACTION=="add", RUN+="/etc/xen/scripts/block bind"
-SUBSYSTEM=="xen-backend", KERNEL=="vbd*", ACTION=="remove", RUN+="/etc/xen/scripts/block unbind"
-SUBSYSTEM=="xen-backend", KERNEL=="vif*", ACTION=="online", RUN+="$env{script} up"
+SUBSYSTEM=="xen-backend", KERNEL=="vbd*", RUN+="/etc/xen/scripts/block $env{ACTION}"
+SUBSYSTEM=="xen-backend", KERNEL=="vif*", ACTION=="online", RUN+="$env{script} online"
+SUBSYSTEM=="xen-backend", KERNEL=="vif*", ACTION=="offline", RUN+="$env{script} offline"
SUBSYSTEM=="xen-backend", ACTION=="remove", RUN+="/usr/bin/xenstore-rm -t $env{XENBUS_PATH}"
+SUBSYSTEM=="xen-backend", ACTION=="remove", RUN+="/usr/bin/xenstore-rm -t error/$env{XENBUS_PATH}"